#ifndef __nixie_driver_h__
#define __nixie_driver_h__

#include <stdint.h>
#include "gd32f4xx.h"
#include "systick.h"
#include "systick.h"

#define NIXIE_DELAY_DURATION 8

#define NIXIE_LED_GONGYANG_0 0b01000000U
#define NIXIE_LED_GONGYANG_1 0b01111001U
#define NIXIE_LED_GONGYANG_2 0b00100100U
#define NIXIE_LED_GONGYANG_3 0b00110000U
#define NIXIE_LED_GONGYANG_4 0b00011001U
#define NIXIE_LED_GONGYANG_5 0b00010010U
#define NIXIE_LED_GONGYANG_6 0b00000010U
#define NIXIE_LED_GONGYANG_7 0b01111000U
#define NIXIE_LED_GONGYANG_8 0b00000000U
#define NIXIE_LED_GONGYANG_9 0b00010000U

#define NIXIE_DIP_GONGYANG_7 0b10000000U
#define NIXIE_DIP_GONGYANG_6 0b01000000U
#define NIXIE_DIP_GONGYANG_5 0b00100000U
#define NIXIE_DIP_GONGYANG_4 0b00010000U
#define NIXIE_DIP_GONGYANG_3 0b00001000U
#define NIXIE_DIP_GONGYANG_2 0b00000100U
#define NIXIE_DIP_GONGYANG_1 0b00000010U
#define NIXIE_DIP_GONGYANG_0 0b00000001U

#define DI_RCU RCU_GPIOD
#define RCK_RCU RCU_GPIOD
#define SCK_RCU RCU_GPIOD

#define DI_GPIO_PORT GPIOD
#define RCK_GPIO_PORT GPIOD
#define SCK_GPIO_PORT GPIOD

#define DI_GPIO_PIN GPIO_PIN_0
#define RCK_GPIO_PIN GPIO_PIN_1
#define SCK_GPIO_PIN GPIO_PIN_4

// 宏函数
#define DI(bit) gpio_bit_write(DI_GPIO_PORT, DI_GPIO_PIN, (bit))
#define SCK(bit) gpio_bit_write(SCK_GPIO_PORT, SCK_GPIO_PIN, (bit))
#define RCK(bit) gpio_bit_write(RCK_GPIO_PORT, RCK_GPIO_PIN, (bit))

void nixie_driver_config(void);

void nixie_driver_send_data(uint16_t data);

void nixie_driver_display_single(uint8_t num, FlagStatus dp, uint8_t dip);

void nixie_driver_display(uint8_t *num, int len, FlagStatus *dps);

void nixie_driver_delay(uint32_t us);

void nixie_driver_test(void);

#endif
